#include<iostream>
using namespace std;
#include <vector>
// 保持：A >= B
bool cmp(vector<int> &A,vector<int> &B){
    if(A.size()!=B.size()){
        return A.size() > B.size();
    }
    //数组高位开始比较，也就是个位
    for (int i = A.size() - 1; i >= 0;i--){
        if(A[i]!=B[i]){
            return A[i] > B[i];
        }
    }
    return true;
}
//A大
vector<int> sub(vector<int> &A,vector<int> &B){
    vector<int> C;
    for (int i = 0,t = 0; i <= A.size()-1;i++){
        t = A[i]  - t;
        if(i<=B.size()-1){
            t -= B[i];
        }
        C.push_back((t + 10) % 10);
        //t<0,表示已经进位了，t>0,表示当前位数就已经足够相减
        if(t>=0){
            t = 0;
        }else{
            t = 1;
        }
    }
    //, 我们是顺序反过来了，所以会导致遍历的时候后面有0，
    while(C.size()>1&&C.back()==0){
        C.pop_back();
    }
    return C;
}

int main(){
    string a, b;
    vector<int> A, B;
    cin >> a >> b;
    for (int i = a.size() - 1; i >= 0;i--){
        A.push_back(a[i] - '0');
    }
    for (int i = b.size() - 1; i >= 0;i--){
        B.push_back(b[i] - '0');
    }
    // C = A - B;
    if (cmp(A,B)){
        auto C = sub(A, B);
        for (int i = C.size() - 1; i >= 0;i--){
            cout << C[i];
        }
    }
    else
    {
        auto C = sub(B, A);
        cout << '-';
        for (int i = C.size() - 1; i >= 0; i--)
        {
            cout<< C[i];
        }
    }
    
    return 0;
}